/*
 * Animal.java
 *
 * Created on October 7, 2007, 10:50 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package petstore.model;

import java.util.ArrayList;
import petstore.model.enumeration.Sexo;
import java.util.Collection;
import java.util.Date;
import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;

/**
 * Entity class Animal
 *
 * @author Tom Hayden
 */
@Entity
@Table(name = "animal")
@AttributeOverrides( {
    @AttributeOverride(name="id", column=@Column(name="cdanimal")),
    @AttributeOverride(name="description", column=@Column(name="nmanimal")),
    @AttributeOverride(name="active", column=@Column(name="ativo"))
})
@NamedQueries({
    @NamedQuery(name="Animal.findByCliente", 
                query="SELECT a " +
                      "FROM Animal a " +
                      "WHERE a.cliente.id = :idCliente " +
                      "AND a.active = true " +
                      "ORDER BY a.description")
})
public class Animal extends CodeData {
    
    @Column(name = "sexo")
    @Enumerated(EnumType.STRING)
    private Sexo sexo;
    
    @Column(name = "dtnascimento")
    @Temporal(TemporalType.DATE)
    private Date dataNascimento;
    
    @Column(name = "stpedigree")
    private boolean pedigree;
    
    @Column(name = "stfalecimento")
    private boolean falecido;
    
    @Version
    private Integer versao;
    
    @ManyToOne
    @JoinColumn(name="cdcliente")
    private Cliente cliente;
    
    @ManyToOne
    @JoinColumn(name="cdpelagem")
    private Pelagem pelagem;
    
    @ManyToOne
    @JoinColumn(name="cdraca")
    private Raca raca;
    
    @OneToMany(mappedBy = "animal", cascade = CascadeType.ALL)
    private Collection<CarteiraVacina> carteiraVacina;
    
    @OneToMany(mappedBy = "animal", cascade = CascadeType.ALL)
    private Collection<CarteiraVermifugo> carteiraVermifugo;
    
    /** Creates a new instance of Animal */
    public Animal() {
        this.carteiraVacina = new ArrayList<CarteiraVacina>();
        this.carteiraVermifugo = new ArrayList<CarteiraVermifugo>();
    }

    public Animal(Integer id) {
        super(id);
    }

    public Sexo getSexo() {
        return sexo;
    }

    public void setSexo(Sexo sexo) {
        this.sexo = sexo;
    }

    public Date getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(Date dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

    public boolean isPedigree() {
        return pedigree;
    }

    public void setPedigree(boolean pedigree) {
        this.pedigree = pedigree;
    }

    public boolean isFalecido() {
        return falecido;
    }

    public void setFalecido(boolean falecido) {
        this.falecido = falecido;
    }

    public Integer getVersao() {
        return versao;
    }

    public void setVersao(Integer versao) {
        this.versao = versao;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public Pelagem getPelagem() {
        return pelagem;
    }

    public void setPelagem(Pelagem pelagem) {
        this.pelagem = pelagem;
    }

    public Raca getRaca() {
        return raca;
    }

    public void setRaca(Raca raca) {
        this.raca = raca;
    }

    public Collection<CarteiraVacina> getCarteiraVacina() {
        return carteiraVacina;
    }

    public void setCarteiraVacina(Collection<CarteiraVacina> carteiraVacina) {
        this.carteiraVacina = carteiraVacina;
    }

    public Collection<CarteiraVermifugo> getCarteiraVermifugo() {
        return carteiraVermifugo;
    }

    public void setCarteiraVermifugo(Collection<CarteiraVermifugo> carteiraVermifugo) {
        this.carteiraVermifugo = carteiraVermifugo;
    }
    
}
